// #include <stdio.h>
// #include <signal.h>

// int flag = 0;

// void handler(int signo)
// {
// 	printf("get a signal:%d\n", signo);
// 	flag = 1;
// }
// int main()
// {
// 	signal(2, handler);
// 	while (!flag);
// 	printf("Proc Normal Quit!\n");
// 	return 0;
// }


// #include <iostream>
// #include <cassert>
// #include <cstring>
// #include <signal.h>
// #include <unistd.h>

// using namespace std;

// static void DisplayPending(const sigset_t pending)
// {
//     // 打印 pending 表
//     cout << "当前进程的 pending 表为: ";
//     int i = 1;
//     while (i < 32)
//     {
//         if (sigismember(&pending, i))
//             cout << "1";
//         else
//             cout << "0";

//         i++;
//     }
//     cout << endl;
// }

// static void handler(int signo)
// {
//     cout << signo << " 号信号确实递达了" << endl;
//     // 最终不退出进程

//     int n = 10;
//     while (n--)
//     {
//         // 获取进程的 未决信号集
//         sigset_t pending;
//         sigemptyset(&pending);

//         int ret = sigpending(&pending);
//         assert(ret == 0);
//         (void)ret; // 欺骗编译器，避免 release 模式中出错

//         DisplayPending(pending);
//         sleep(1);
//     }
// }

// int main()
// {
//     cout << "当前进程: " << getpid() << endl;

//     //使用 sigaction 函数
//     struct sigaction act, oldact;

//     //初始化结构体
//     memset(&act, 0, sizeof(act));
//     memset(&oldact, 0, sizeof(oldact));

//     //初始化 自定义动作
//     act.sa_handler = handler;

//     //初始化 屏蔽信号集
//     //sigaddset(&act.sa_mask, 3);
//     sigaddset(&act.sa_mask, 4);
//     sigaddset(&act.sa_mask, 5);

//     //给 2号 信号注册自定义动作
//     sigaction(2, &act, &oldact);

//     // 死循环
//     while (true);

//     return 0;
// }